A driver, or device driver, is a software component that permits a computer system to communicate with the particular device. Because the driver handles device specific features, an operating system is freed from the burden of having to understand and support needs of individual hardware devices. However, if a driver is faulty, the particular device controlled by the driver can fail to work properly and can even be completely inoperative. Such problems are especially problematic for key devices such as a video card, hard drive controller or hard drive. Additionally, a faulty driver can often cause an operating system to become unstable, create problems with a whole computer system and may even lead to system operation halting. If properly identified, faulty drivers can be updated with non-faulty updated drivers to mitigate further problems with the device, operating system and/or computer system. However, faulty drivers can be quite difficult to identify. For example, a faulty driver for a scanner may operate adequately until a printer and video camera are accessed simultaneously. A user or administrator, in such a case, may have a difficult time determining which driver, if any, is faulty.
Computer systems of the past had a relatively small number of peripheral devices (e.g., mouse, keyboard, monitor, video card, printer, floppy drive, drives). In such systems, management of these devices was relatively simple in part due to limited number of manufacturers producing the devices. The manufacturers provided device drivers for the respective devices, and in the event an operating system detected error(s) associated with the device(s) the same manufacturers were able to update, relatively easily and quickly, device drivers to address the error(s). Furthermore, many of the devices of that period were less complex than devices of today and did not require as much work in developing adequate drivers. Also, users and administrators were able to identify problematic drivers because of the limited number of available drivers in the marketplace.
Computer systems of today are different, and often employ a significant number of devices and corresponding device drivers. For example, a typical computer system of today can utilize devices such as sound cards, bus controllers, video capture devices, audio capture devices, universal serial bus devices, firewire controllers and devices, DVD drives, network cards, DSL modems, cable modems, LCD monitors, monitors, laser printers, ink jet printers, fax machines, scanners, digital cameras, digital video cameras and the like. Additionally, a single device can employ more than one device driver. For example, a typical 3-D video card can require numerous device drivers. In addition, device drivers of today are generally more complex than device drivers of the past.
Another problem with drivers is that a device manufacturer may not know that a device driver is faulty. Often, even extensive testing of device drivers fails to identify faulty drivers. It is quite difficult, if not impossible to test a device driver in every conceivable system with every possible other device driver. A user may simply return a device because of a faulty driver without the manufacturer knowing the real reason for the return. Therefore, an updated driver correcting the problems of the faulty driver is not developed. Yet another problem with device drivers is that some manufacturers may not subject their drivers to adequate testing before distribution. Sometimes, manufacturers are in a rush to bring their devices (and device drivers) to market and may forego certain testing procedures in order to satisfy a production/delivery deadline. Another problem associated with device drivers is that there is no adequate means for reporting faulty drivers to manufacturers or operating system developers. Users or administrators are generally required to, at their own initiative, contact a manufacturer or operating system developer to report a faulty driver. Thus, it is likely that many errors caused by faulty drivers are never reported.
Yet another problem with device drivers is that of backwards compatibility. A driver can have a latent defect or bug that is benign and/or undetected on a certain version of an operating system. However, that latent defect can become problematic or even critical for other versions of the operating system due to changes in structures, memory layout and the like.
One approach to mitigating problems caused by faulty drivers is to certify drivers for particular operating systems. A certified driver would then be considered to have passed rigorous testing by a certifying organization; however, this approach is also prone to problems. To adequately test and certify every possible device driver in a timely and efficient manner is not feasible in part because of the vast number of device drivers available. Additionally, even a certified driver can be faulty because, as stated above, it is difficult to test a device driver in every possible system with every other possible device. Finally, there remains no adequate or sufficient means of reporting errors caused by faulty drivers to a manufacturer or operating system developer.